SQL ORDER BY
SELECT
statement toe om de lijst te ordenen.Probleem
Het is niet genoeg gegevens uit een tabel te kunnen opvragen, je moet ze ook kunnen sorteren of ordenen. We willen bijvoorbeeld lijsten in alfanumerieke volgorde weergeven omdat het gemakkelijker is om bijvoorbeeld een naam in een alfanumeriek geordende lijst te zoeken.
Oplossing
Om te sorteren gebruiken we de clusule ORDER BY
. Het sorteren kan op 2 manieren:
- oplopend en
- aflopend.
In het Engels is dat ascending en descending. In SQL wordt dat afgekort naar de clausules ASC
en DESC
. Stel dat je de namen uit de tabel boeken wil opvragen gesorteerd op de voornaam, de familienaam en titel van de boeken. De query ziet er dan zo uit:
-- ji -- 4 december 2012 -- use JefInghelbrecht; -- genest orderen -- ascending select Voornaam, Familienaam, Titel from Boeken order by Familienaam asc, Voornaam, Titel; -- desc -- descending select Voornaam, Familienaam, Titel from Boeken order by Familienaam desc, Voornaam, Titel
Oefening
Selecteer alle boeken volgens Verschijningsjaar te beginnen met het meest recente boek
-- ji -- 11 september 2013 -- bestandsnaam: BoekenSelectOrderByVerschijningsjaar.sql use JefInghelbrecht; select Verschijningsjaar, Voornaam, Familienaam, Titel from Boeken order by Verschijningsjaar desc;
De volgorde van de kolommen in de ORDER BY
clausule moet niet overeenkomen met de volgorde van de kolommen in het SELECT
statement.
De clausule ASC
of DESC
moet voor elke kolom bepaald worden. Je kan de volgorde dus ook mixen:
select Voornaam, Familienaam, Titel from Boeken order by Familienaam desc, Voornaam, Titel asc;
Hieronder zie je het resultaat in SSMS (in MySQL Workbench is dat gelijkaardig):
Kenny merkte op dat je de voornaam en familienaam in één kolom kan plaatsen en had deze oplossing:
select Voornaam + space(1) + Familienaam as Auteur, Title from Boeken order by Auteur asc, Titel asc;
space()
is een functie die het aantal spaties retourneert die door het argument aangegeven wordt.
Yoshi merkte op dat de kolom geen naam heeft:
Je kan aan de samengestelde kolom een naam geven door gebruik te maken van de as
clausule:
select Voornaam + space(1) + Familienaam as Naam, Titel from Boeken order by Familienaam desc, Voornaam, Titel asc
Opdracht
Selecteer verschijningsjaar, titel en auteur van alle boeken volgens verschijningsjaar te beginnen met het meest recente boek en binnen elke verschijningsjaar zijn de familienamen alfabetisch geordend.
Sla de script op in BoekenSelectOrderByMeestRecenteBoekEerst.sql
JI